#include <iostream>
#include <unistd.h>
#include <signal.h>

using namespace std;
void PrintPending(sigset_t& pending)
{
    for(int signo = 31; signo >= 1; signo--)
    {
        if(sigismember(&pending,signo))
        {
            cout << "1";
        }
        else
        {
            cout << "0";
        }
    }
    cout << endl << endl;
}
int main()
{
    //对2号信号忽略
    signal(2,SIG_IGN);
    //1.先对2号信号进行屏蔽
    sigset_t bset,oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    sigaddset(&bset,2);

    //调用系统调用，将数据设置进内核
    sigprocmask(SIG_SETMASK,&bset,&oset);//这里才是把2号信号进行屏蔽了
    //重复打印当前进程的pending
    sigset_t pending;
    int cnt = 0;
    while(true)
    {
        //获取
        int n = sigpending(&pending);
        //打印
        PrintPending(pending);
        sleep(1);
        cnt++;
        //解除阻塞，pending会由1变成0
        if(cnt == 10)
        {
            cout << "2号进行解除屏蔽" << endl;
            sigprocmask(SIG_SETMASK,&oset,nullptr);
        }
    }
    //发送2号信号
    return 0;
}